在向应用程序添加了C1FlexGrid之后,像大多数的其他Grid产品一样,您可以通过ItemsSource属性填充该Grid。
ItemsSource属性需要传入一个实现了IEnumerable 接口的对象,但是在大多数情况下,您将使用更高层次的,实现了ICollectionView 接口的对象。ICollectoinView接口是Silverlight以及WPF主要的数据绑定接口(在WinForms平台下,该角色由IBindingList接口扮演)。
ICollectionView是一个丰富的接口。除了枚举数据项,它还同时提供了排序、过滤、分页、分组以及Currency管理的服务。
Silverlight提供了一个实现ICollectionView接口PagedCollectionView 类。PagedCollectionView的构造函数接受一个IEnumerable对象作为参数,并自动提供所有的ICollectionView服务。WPF提供类似的类型,比方说ListCollectionView。
例如,为了在一个C1FlexGrid Silverlight应用程序中显示一个客户对象的列表,请使用如下所示代码:
C# |
拷贝代码
|
---|---|
List<Customer> list = GetCustomerList();
PagedCollectionView view = new PagedCollectionView(list);
_flexGrid.ItemsSource = view;
|
您也可以直接将grid绑定到客户列表。但是绑定到一个ICollectionView通常是一个较好的主意,因为它为应用程序保留了大量的数据配置相关信息,这些信息可以跨控件共享。
如果多个控件绑定到同一个ICollectionView对象,则它们将展示同样的视图。在一个控件中选择一个项目会自动更新所有其他绑定控件中的选择。过滤,分组,或排序,也被所有的控件绑定到相同的视图中。
上面的代码会导致Grid扫描数据源,并为每一个数据源中的项的公共属性生成列。您可以通过代码自定义这些自动生成的列。或者您可以干脆禁用自动生成列的功能,通过代码或者XAML自己生成这些列。
例如,以下XAML禁用了自动列生成并手动通过XAML指定列:
C1FlexGrid XAML |
拷贝代码
|
---|---|
<!-- create columns on a C1FlexGrid --> <fg:C1FlexGrid x:Name="_flexiTunes" AutoGenerateColumns="False" > <fg:C1FlexGrid.Columns> <fg:Column Binding="{Binding Name}" Header="Title" AllowDragging="False" Width="300"/> <fg:Column Binding="{Binding Duration}" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding Size}" HorizontalAlignment="Right" /> <fg:Column Binding="{Binding Rating}" Width="200" HorizontalAlignment ="Center" /> </fg:C1FlexGrid.Columns> </fg:C1FlexGrid> |
这和您在Microsoft DataGrid 或者最初的ComponentOne DataGrid控件中完成相同的任务所需要的XAML类似:
DataGrid XAML |
拷贝代码
|
---|---|
<!-- create columns on an MSDataGrid (or C1DataGrid) --> <ms:DataGrid Name="_msSongs" AutoGenerateColumns="False" > <ms:DataGrid.Columns> <ms:DataGridTextColumn Binding="{Binding Name}" Header="Title" CanUserReorder="False" Width="300" /> <ms:DataGridTextColumn Binding="{Binding Duration}" /> <ms:DataGridTextColumn Binding="{Binding Size}" /> <ms:DataGridTextColumn Binding="{Binding Rating}" Width="200" /> </ms:DataGrid.Columns> </ms:DataGrid> |
正如你所看到的,语法是几乎完全相同的。注意,您可以将此绑定做为访问Grid的列集合的索引。例如,如果您希望通过代码将“Rating”列的宽度变为300像素,则可以这样添加代码:
C# |
拷贝代码
|
---|---|
_flexiTunes.Columns["Rating"].Width = new GridLength(300); |
这是C1FlexGrid 用户最熟悉的语法。当您使用控件的WinForms版本时,这些命令也完全相同。